package cloud.xiangyixiang.www.spring.boot.java.basics.controller;

/**
 * <p>
 * JAVA 字符串转换
 *
 *  toString()、String.valueOf、(String)强转
 * </p>
 *
 * @author zhixinglu
 * @date 2023/9/2 16:14
 */
public class StringConvertController {

    public static void main(String[] args) {

        description();

        test3();
        test2();

        test4();
        test1();

    }

    /**
     * 描述介绍
     */
    public static void description(){

        System.out.println("描述介绍：===================");

        System.out.println("基础类型转String类型。没有toString()方法，推荐：String.valueOf() ");

        System.out.println("封装类型转String类型。是有toString()方。String.valueOf() 也可以。无法强转");

        System.out.println("总结：");
        System.out.println("     在这种使用方法中，因为java.lang.Object类里已有public方法.toString()，所以java对象都可以调用此方法。但在使用时要注意，必须保证object不是null值，否则将抛出NullPointerException异常。采用这种方法时，通常派生类会覆盖Object里的toString()方法。");
        System.out.println("     String.valueOf()方法是推荐使用的，因为它不会出现空指针异常，而且是静态的方法，直接通过String调用即可，只是有一点需要注意，就是上面提到的，如果为null，String.valueOf()返回结果是字符串“null”。而不是null。");
        System.out.println("    （String）是标准的类型转换，将Object类型转为String类型，使用(String)强转时，最好使用instanceof做一个类型检查，以判断是否可以进行强转，否则容易抛出ClassCastException异常。需要注意的是编写的时候，编译器并不会提示有语法错误，所以这个方法要谨慎的使用");

        System.out.println();

    }

    /**
     * (String) 强壮
     */
    public static void test1(){
        System.out.println("(String) 强转：===================");
        Object a = 0;
        String b = (String) a;
        System.out.println(b);

        System.out.println();
    }

    /**
     * instanceof
     */
    public static void test2(){
        System.out.println("instanceof：===================");
        Object a = 0;
        if ( a instanceof String){
            String b = (String) a;
            System.out.println(b);
        } else {
            System.out.println("error: " + a);
        }

        System.out.println();
    }

    /**
     * 分装类型转String
     */
    public static void test3(){
        System.out.println("封账类型：===================");
        Integer a = 0;
        String b = a.toString();
        System.out.println("eg1: Integer a = 0; String b = a.toString(); \n" +
                "     b result: " + b);

        String c = String.valueOf(a);
        System.out.println("eg2: Integer a = 0; String b = String.valueOf(a); \n" +
                "     c result: " + c);

        System.out.println();
    }

    /**
     * null 值问题
     */
    public static void test4() {
        System.out.println("null值问题：===================");
        Integer a = null;

        String b = String.valueOf(a);
        System.out.println("eg1: Integer a = 0; String b = String.valueOf(a);");
        System.out.println("     c result: " + b);
        System.out.println("     c==null result: " + (b==null));
        System.out.println("     c.equals(null) result: " + "null".equals(b));


        Object d = null;
        String e = (String) d;
        System.out.println("eg1: Object d = null; String e = (String) d;");
        System.out.println("     e result: " + e);


        String c = a.toString();
        System.out.println("eg3: Integer a = null; String b = a.toString();");
        System.out.println("     b result: " + c);


        System.out.println();
    }

}
